
//数组
let arr: number[] = [100, 200, 300];
let arr2: Array<number> = [100, 200, 300]; //或使用数组泛型

//元组
//是一个特殊的数组，可以理解为一个支持不同数据类型的固定长度固定类型的数组
//必须指定类型，否则就不是元组，而是union array(联合类型数组)
let tuple: [string, number];
tuple = ['simon', 18];
//tuple = [18, 'simon']; //报错，类型套不上
console.log(tuple[0]);
console.log(tuple[1]);
//tuple[2] = "ouyang"; //报错，越界
//console.log(tuple[2]);
tuple.push(123); //这是TS的一个bug，理论上来说是不支持增加新元素了

//联合类型数组
let union: string | number | boolean;
union = "simon";
union = 666;
union = false;
//union = [100, 200, 300]; //在以上定义中，union变量不支持数组
let uniArray = ['simon', 18];
uniArray[0] = 18;
uniArray[1] = "ouyang";
uniArray[2] = 36;
uniArray.push(100); 
console.log('uniArray的长度为：' + uniArray.length);

function merge(a: number | string, b: number | string) { //参数为联合类型的情况
    if(typeof a === 'number' && typeof b === 'number') {
        return a + b;
    }
    if(typeof a === 'string' && typeof b === 'string') {
        return a.toString() + b.toString();
    }
}
console.log(merge(100, 200));
console.log(merge("hello", " simon"));